#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
#include "kernel/param.h"
int
main(int argc, char *argv[])
{
    char *args[MAXARG];
    char buf[512];
    if (argc < 2) {
        fprintf(2, "Usage: xargs command [args...]\n");
        exit(1);
    }
    // 先复制现有参数到args
    for(int i = 1; i<argc; i++){
        args[i-1] = argv[i];
    }
    // 外层循环读取每一行参数
    while(1) {
        int i = 0;
        int n = 0;
        // 读到文件末尾或者换行符就停止
        while(i<512 && (n=read(0, &buf[i], 1)) == 1 && buf[i] != '\n'){
            i++;
        }
        if(n <= 0) break;
        if(i >= 512) {
            printf("too long argument");
            exit(1);
        }
        if(i == 0) continue; // 跳过空行
        buf[i] = 0; // 添加字符串结束符

        // 将读取到的这一行参数放到args
        args[argc-1] = buf;
        // 参数列表必须以空指针结尾
        args[argc] = 0;
        
        if(fork() == 0) {
            exec(args[0], args);
            printf("exec error.\n");
            exit(1);
        } else{
            wait(0); // 父进程等待子进程结束
        }
    }
    exit(0);
}

